diff --git a/system/libraries/Cache/drivers/Cache_apc.php b/system/libraries/Cache/drivers/Cache_apc.php
index ea129ed..de75719 100644
--- a/system/libraries/Cache/drivers/Cache_apc.php
+++ b/system/libraries/Cache/drivers/Cache_apc.php
@@ -10,30 +10,30 @@
  * @license		http://codeigniter.com/user_guide/license.html
  * @link		http://codeigniter.com
  * @since		Version 2.0
- * @filesource
+ * @filesource	
  */
 
 // ------------------------------------------------------------------------
 
 /**
- * CodeIgniter APC Caching Class
+ * CodeIgniter APC Caching Class 
  *
  * @package		CodeIgniter
  * @subpackage	Libraries
  * @category	Core
  * @author		ExpressionEngine Dev Team
- * @link
+ * @link		
  */
 
 class CI_Cache_apc extends CI_Driver {
 
 	/**
-	 * Get
+	 * Get 
 	 *
-	 * Look for a value in the cache. If it exists, return the data
+	 * Look for a value in the cache.  If it exists, return the data 
 	 * if not, return FALSE
 	 *
-	 * @param 	string
+	 * @param 	string	
 	 * @return 	mixed		value that is stored/FALSE on failure
 	 */
 	public function get($id)
@@ -43,8 +43,8 @@
 		return (is_array($data)) ? $data[0] : FALSE;
 	}
 
-	// ------------------------------------------------------------------------
-
+	// ------------------------------------------------------------------------	
+	
 	/**
 	 * Cache Save
 	 *
@@ -58,7 +58,7 @@
 	{
 		return apc_store($id, array($data, time(), $ttl), $ttl);
 	}
-
+	
 	// ------------------------------------------------------------------------
 
 	/**
@@ -90,7 +90,7 @@
 	 * Cache Info
 	 *
 	 * @param 	string		user/filehits
-	 * @return 	mixed		array on success, false on failure
+	 * @return 	mixed		array on success, false on failure	
 	 */
 	 public function cache_info($type = NULL)
 	 {
@@ -137,13 +137,13 @@
 			log_message('error', 'The APC PHP extension must be loaded to use APC Cache.');
 			return FALSE;
 		}
-
+		
 		return TRUE;
 	}
 
 	// ------------------------------------------------------------------------
 
-
+	
 }
 // End Class
 
diff --git a/system/libraries/Cache/drivers/Cache_file.php b/system/libraries/Cache/drivers/Cache_file.php
index 39dcd15..13e2d1a 100644
--- a/system/libraries/Cache/drivers/Cache_file.php
+++ b/system/libraries/Cache/drivers/Cache_file.php
@@ -10,19 +10,19 @@
  * @license		http://codeigniter.com/user_guide/license.html
  * @link		http://codeigniter.com
  * @since		Version 2.0
- * @filesource
+ * @filesource	
  */
 
 // ------------------------------------------------------------------------
 
 /**
- * CodeIgniter Memcached Caching Class
+ * CodeIgniter Memcached Caching Class 
  *
  * @package		CodeIgniter
  * @subpackage	Libraries
  * @category	Core
  * @author		ExpressionEngine Dev Team
- * @link
+ * @link		
  */
 
 class CI_Cache_file extends CI_Driver {
@@ -36,9 +36,9 @@
 	{
 		$CI =& get_instance();
 		$CI->load->helper('file');
-
+		
 		$path = $CI->config->item('cache_path');
-
+	
 		$this->_cache_path = ($path == '') ? APPPATH.'cache/' : $path;
 	}
 
@@ -56,16 +56,16 @@
 		{
 			return FALSE;
 		}
-
+		
 		$data = read_file($this->_cache_path.$id);
 		$data = unserialize($data);
-
-		if (time() > $data['time'] + $data['ttl'])
+		
+		if (time() >  $data['time'] + $data['ttl'])
 		{
 			unlink($this->_cache_path.$id);
 			return FALSE;
 		}
-
+		
 		return $data['data'];
 	}
 
@@ -76,22 +76,22 @@
 	 *
 	 * @param 	string		unique key
 	 * @param 	mixed		data to store
-	 * @param 	int			length of time (in seconds) the cache is valid
+	 * @param 	int			length of time (in seconds) the cache is valid 
 	 *						- Default is 60 seconds
 	 * @return 	boolean		true on success/false on failure
 	 */
 	public function save($id, $data, $ttl = 60)
-	{
+	{		
 		$contents = array(
 				'time'		=> time(),
-				'ttl'		=> $ttl,
+				'ttl'		=> $ttl,			
 				'data'		=> $data
 			);
-
+		
 		if (write_file($this->_cache_path.$id, serialize($contents)))
 		{
 			@chmod($this->_cache_path.$id, 0777);
-			return TRUE;
+			return TRUE;			
 		}
 
 		return FALSE;
@@ -116,7 +116,7 @@
 	 * Clean the Cache
 	 *
 	 * @return 	boolean		false on failure/true on success
-	 */
+	 */	
 	public function clean()
 	{
 		return delete_files($this->_cache_path);
@@ -151,10 +151,10 @@
 		{
 			return FALSE;
 		}
-
-		$data = read_file($this->_cache_path.$id);
+		
+		$data = read_file($this->_cache_path.$id);		
 		$data = unserialize($data);
-
+		
 		if (is_array($data))
 		{
 			$data = $data['data'];
@@ -170,7 +170,7 @@
 				'mtime'		=> $mtime
 			);
 		}
-
+		
 		return FALSE;
 	}
 
@@ -180,7 +180,7 @@
 	 * Is supported
 	 *
 	 * In the file driver, check to see that the cache directory is indeed writable
-	 *
+	 * 
 	 * @return boolean
 	 */
 	public function is_supported()
